package com.线程Thread.线程同步;

public class 释放锁 {
    /**
     * 释放锁的四种情况：
     * 1.当前线程的同步方法或同步代码块结束；
     * 例如：     上完了厕所，释放坑位；
     * 2.当前线程遇到了break，return，提前结束；
     * 例如：     上厕所中突然被老板赶出去了；
     * 3.当前线程在同步代码块中出现了未处理的Exception或Error，
     * 例如：     刚进去发现没带纸，出去了；
     * 4.当前线程在同步代码块中执行了对线程对象的wait（）方法，当前线程暂停，并释放锁；
     * 例如：     拉不出来，暂时让给别人；
     */
    /**
     * 不会释放锁的情况：
     * 1.线程执行同步代码块时，程序调用Thread.sleep(),Thread.yield()方法暂停当前线程的锁，不会释放锁；
     * 例如：上厕所睡着了，别人也进不去；
     * 2.线程调用到同步代码块时，其他线程调用了该线程的suspend（）方法，将该线程挂起，不会释放锁；
     *
     * 提示：尽量避免使用suspend（）和resume（）来控制线程；
     */
}
